package com.itheima.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import com.itheima.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Service(interfaceClass = OrderSettingService.class)
@Transactional
public class OrderSettingServiceImpl implements OrderSettingService {

    @Autowired
    private OrderSettingDao orderSettingDao;

    @Override
    public void setDateByNumber(OrderSetting orderSetting) {
        //如果直接插入  用户对同一个用户操作2次  数据库就会有一个日期 对应2条数据

            //1. 根据日期查询是否存在预约设置
                Integer count = orderSettingDao.findByDate(orderSetting.getOrderDate());
           //进行判断
                        if (count>0){
                            //2.如果存在 那我们就刷新操作
                            //存在操作  第二次操作时 对前面设置 进行刷新
                            orderSettingDao.edit(orderSetting);

                        }else {
                            //3.如果不存在 我们就添加
                            orderSettingDao.add(orderSetting);
                        }
    }

    @Override
    public void addBatch(List<OrderSetting> orderSettings) {

        // 这里不能批量传入
            // 要遍历循环得到数据
        for (OrderSetting orderSetting : orderSettings) {
                setDateByNumber(orderSetting);
        }
    }


    //数据回显 日期  可预约人数
    @Override
    public List<Map> queryByDate(String date) { //2020-03
        //创建一个数组   来保存数据
            List<Map> result = new ArrayList<>();

        //开始时间
            String start = date + "-01";
        //结束时间
            String end = date + "-31";

        //查询
            List<OrderSetting> orderSettings =  orderSettingDao.queryByDate(start,end);
        //判断  从每月日期开始到结束 设置 是否为空
             if (CollectionUtil.isNotEmpty(orderSettings)){
                 //遍历循环 从开始到结束 查咨询出来的内容
                     for (OrderSetting orderSetting : orderSettings) {
                         // 格式 如下：
                         //{"date":22,"mouth":1,"number":300,"reservations":300,},
                            //创建一个Map 集合 来保存 数值
                                Map map = new HashMap<>();
                                //获得年月日的值
                                    Date orderDate = orderSetting.getOrderDate();
                                        //往集合里面添加数值
                                            map.put("date",orderDate.getDate());
                                            map.put("mouth",orderDate.getMonth());
                                            map.put("number",orderSetting.getNumber());
                                            map.put("reservations",orderSetting.getReservations());
                                                //把拼好的数值 添加到result（Map） 数组中
                                            result.add(map);

                     }
             }

        return result;
    }




}
